MFA設定されたAWSアカウントで簡単にAWSumeを使う
前提・困っていたこと
AWS CLIを使った作業を行う場合に、スイッチロールを使ってAWSリソースにアクセスするのにDevelopersIOで紹介されていたAWSumeを利用しています。
ここで、スイッチロール元のAWSアカウントにMFAが設定されている場合、
awsume <profile_name> Enter MFA token:
のように、MFAトークンの入力を求められます。
AWSアカウントの認証情報は1Passwordで管理しているため、ここで1Passwordを起動して、スイッチロール元のAWSアカウントの情報を表示、MFAシリアルの値をコピーして、ターミナルに貼り付けていました。
毎回、この操作を繰り返すのが手間だと考えたので、これを省力化する方法を探しました。
解決方法
1Password CLI 2 を使ってコマンドラインで MFA の認証コード (OTP) を取得する方法が書かれた記事がありました。
他方で、AWSume
には、MFAトークンを受け取るオプションが存在したので、その組み合わせを使ってみました。
- AWSumeをインストールし、利用したいAWSアカウントがスイッチロールで利用できるように設定する
- 1Password CLI 2をインストールする(バージョン2である必要があります)
eval $(op signin)
でCLIから1Passwordにサインインする- 1Password CLI 2 を使ってコマンドラインで MFA の認証コード (OTP) を取得するを参考に、スイッチロール元のMFAシリアルが取得できることを確認する
その上で、以下の組み合わせで、MFAトークンを手動で入力することなく、AWSume
を利用することができました。
awsume <profile_name> --mfa-token `op item get "AWS Account" --otp`
ここで、 profile_name
は、スイッチロール先のAWS CLIのプロファイル名、"AWS Account"
は、1Passwordで管理しているスイッチロール元のAWSアカウントの名前を入力します。